
题目分析
本题的思路也比较神奇,先给小伙伴提示一下,因为三个部分表示的值一样,且都是二进制,因此三个部分对应1的数量应该相同。
双指针
本题是一个三指针的题目,根据上面的提示,我们可以统计1的总个数,然后看是否是三的倍数。如果不是,一定无法三等分。如果是,我们需要找到第一部分的第一个1(p1)、第二部分的第一个1(p2)和第三部分的第一个1(p3)出现的位置。因为长度是固定的,因此第三部分的值是固定的。就是从第三部分的第一个1一直到数组的最后一位。
假设从p3到最后一位的长度为len。那么剩下就需要看从p1开始,长度为len的区间,是否都和从p2开始,长度为len的区间相等,且和从p3开始长度为len的区间相等。
这里要注意p1 + len必须小于等于p2,p2 + len必须小于等于p3,不能有重叠。
算法的**时间复杂度为O(n),空间复杂度为O(1)**。
1 | class Solution { |
刷题总结
本题的难度不大,算不上困难的范围,主要是要想到三个相等的部分,其中1的数量也要相同。